// 加密密钥
let ENCRYPTION_KEY = '';

// 生成符合AES要求的密钥
function generateKey(rawKey) {
    // 使用SHA-256生成固定长度的密钥
    const hash = CryptoJS.SHA256(rawKey);
    // 取前32字节作为AES-256密钥
    return CryptoJS.enc.Base64.stringify(hash).substring(0, 32);
}

// 获取加密密钥
async function getEncryptionKey() {
    try {
        const response = await fetch('/api/encryption-key');
        if (response.ok) {
            const data = await response.json();
            ENCRYPTION_KEY = generateKey(data.key);
        } else {
            console.error('获取加密密钥失败');
        }
    } catch (error) {
        console.error('获取加密密钥失败:', error);
    }
}

// 加密函数
function encryptData(data) {
    if (!ENCRYPTION_KEY) {
        throw new Error('加密密钥未初始化');
    }
    // 使用CBC模式和PKCS7Padding
    const key = CryptoJS.enc.Utf8.parse(ENCRYPTION_KEY);
    // 使用密钥的前16字节作为IV
    const iv = CryptoJS.enc.Utf8.parse(ENCRYPTION_KEY.substring(0, 16));
    const encrypted = CryptoJS.AES.encrypt(JSON.stringify(data), key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString();
}

// 获取表单、账号和密码字段
const form = document.getElementById("login-form");
const usernameInput = document.getElementById("username");
const passwordInput = document.getElementById("password");

// 页面加载时获取加密密钥和随机背景
getEncryptionKey();
setRandomBackground();

// 设置随机背景图片
async function setRandomBackground() {
    try {
        const response = await fetch('/api/backgrounds');
        if (response.ok) {
            const data = await response.json();
            if (data.success && data.images.length > 0) {
                // 随机选择一张图片
                const randomIndex = Math.floor(Math.random() * data.images.length);
                const randomImage = data.images[randomIndex];
                document.body.style.backgroundImage = `url('/images/${randomImage}')`;
            }
        }
    } catch (error) {
        console.error('获取背景图片失败:', error);
    }
}

// 监听表单提交
form.addEventListener("submit", async function(event) {
    event.preventDefault();  // 防止表单默认提交

    const username = usernameInput.value.trim();
    const password = passwordInput.value.trim();

    if (username && password) {
        try {
            // 确保已获取加密密钥
            if (!ENCRYPTION_KEY) {
                await getEncryptionKey();
            }

            // 加密数据
            const encryptedData = encryptData({
                username: username,
                password: password
            });

            // 发送POST请求到后端API
            const response = await fetch('/api/login', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({ encryptedData: encryptedData })
            });

            // 检查响应状态
            if (response.ok) {
                const data = await response.json();
                if (data.success) {
                    // 登录成功
                    alert("登录成功！");
                    // 登录成功后跳转
                    window.location.href = "../html/success.html";
                } else {
                    // 登录失败，显示错误消息
                    alert(data.message || "账号或密码错误，请重试！");
                }
            } else {
                // 处理不同的错误状态
                const data = await response.json();
                alert(data.message || "登录失败，请稍后再试！");
            }
        } catch (error) {
            console.error('登录请求失败:', error);
            alert("发生了一个错误，请稍后再试！");
        }
    } else {
        alert("请输入账号和密码！");
    }
});